const path = require('path');
const PrerenderSPAPlugin = require('prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
const CompressionPlugin = require('compression-webpack-plugin')
module.exports = {
  publicPath: '/', // 基本路径
  outputDir: process.env.outputDir,
  lintOnSave: false, // eslint-loader 是否在保存的时候检查
  // webpack配置
  productionSourceMap: false, // 生产环境是否生成 sourceMap 文件
  // css相关配置
  css: {
    sourceMap: false, // 开启 CSS source maps?
    loaderOptions: {
      sass:{
        sassOptions:{
          outputStyle: 'expanded'
        }
      },
      postcss: {
        plugins: [
          require('postcss-px2rem')({
            remUnit: 192
          })
        ]
      }
    },
  },
  configureWebpack: config => {
    config['externals'] = {
      'AMap': 'AMap' // 高德地图配置
    }
    if (process.env.NODE_ENV !== 'production') return;
    // 正式环境移除console.log
    if (process.env.NODE_ENV === 'production') {
      config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
    }
    return {
        plugins: [
            // 前端静态页面预渲染
            new PrerenderSPAPlugin({
                staticDir: path.join(__dirname,process.env.outputDir),
                routes: ['/homePc','/engineering','/mechanicsItemInfo','/mechanicsInfoData','/engineeringInfo','/mechanics'],
                minify: {
                  minifyCSS: true,
                  removeComments: true,
                  collapseBooleanAttributes: true,
                },
                renderer: new Renderer({
                    renderAfterTime: 5000,
                    inject: {
                        foo: 'bar'
                    },
                    headless: false,
                    // 在 main.js 中 document.dispatchEvent(new Event('render-event'))，两者的事件名称要对应上。
                    renderAfterDocumentEvent: 'render-event'
                })
            }),
            // 压缩js css html
            new CompressionPlugin({
              test: /\.js$|\.html$|\.css/, //匹配文件名
              threshold: 10240, //对超过10k的数据进行压缩
              deleteOriginalAssets: false //是否删除原文件
          })
        ],
    };
  },
  parallel: require('os').cpus().length > 1, // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用，仅作用于生产构建。
  pwa: {}, // PWA 插件相关配置 see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
  // webpack-dev-server 相关配置
  devServer: {
    host: '0.0.0.0', // 允许外部ip访问
    port: 8080, // 端口
    https: false, // 启用https
    compress:true,//gzip压缩
    hot:true,//热更新
    historyApiFallback:true,//解决启动后刷新404
    overlay: {
      warnings: true,
      errors: true
    }, // 错误、警告在页面弹出
    proxy: {
      '/cloud': {
        // target: 'https://t.honglonglong.net/cloud/', // 测试
        target: "https://rest.honglonglong.com.cn/cloud/", //正式
        ws: true,
        changeOrigin: true, // 允许websockets跨域
        // ws: true,
        pathRewrite: {
          '^/cloud': ''
        }
      },
    } // 代理转发配置，用于调试环境
  },
  // 第三方插件配置
  pluginOptions: {}
}
